from loguru import logger
from pathlib import Path

from common.config.setting import settings

# 日志目录
LOG_DIR = Path(__file__).parent.parent.parent / "logs"
LOG_DIR.mkdir(exist_ok=True)

# 日志级别
LOG_LEVEL = settings.LOG_LEVEL.upper()

# 日志格式
STDOUT_FORMAT = (
    "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
    "<level>{level: <8}</level> | "
    "<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - "
    "<level>{message}</level>"
)

FILE_FORMAT = (
    "{time:YYYY-MM-DD HH:mm:ss.SSS} | "
    "{level: <8} | "
    "{name}:{function}:{line} - {message}"
)

# 移除默认处理器
logger.remove()

# 添加控制台处理器
logger.add(
    sink="sys.stdout",
    level=LOG_LEVEL,
    format=STDOUT_FORMAT,
    colorize=True,
    backtrace=True,  # 显示完整异常堆栈
    diagnose=True,   # 显示详细异常信息
)

# 添加文件处理器 - 常规日志
logger.add(
    sink=LOG_DIR / "app.log",
    level="INFO",
    format=FILE_FORMAT,
    rotation="10 MB",        # 日志文件大小达到10MB时自动分割
    retention="7 days",      # 保留7天的日志
    compression="zip",       # 归档时压缩为zip
    enqueue=True,            # 异步写入
    serialize=False,         # 不使用JSON格式
)

# 添加文件处理器 - 错误日志
logger.add(
    sink=LOG_DIR / "error.log",
    level="ERROR",
    format=FILE_FORMAT,
    rotation="10 MB",
    retention="30 days",
    compression="zip",
    enqueue=True,
    serialize=False,
)

# 导出配置好的logger
__all__ = ["logger"]